﻿using System.Collections.Generic;
using System.Web.Mvc;
using Mvc4WebApiKoTb.Helpers.Enums;

namespace ContactMvc4TB.Helpers.HelperClasses
{
    /// <summary>
    /// Custom Message, damit Nachrichten auch über Views hinweg dargestellt werden können.
    /// </summary>
    public class CustomMessage
    {
        #region static
        /// <summary>
        /// Gibt eine Instanz von CustomMessage zurück um Benutzerdefinierte Messages über Views hinweg anzeigen zu können.
        /// http://stackoverflow.com/questions/4642845/asp-net-mvc-how-to-preserve-modelstate-errors-across-redirecttoaction
        /// </summary>
        /// <param name="controller">Der CurrentController damit auf TempData zugegriffen werden kann.</param>
        /// <returns></returns>
        public static CustomMessage CurrentMessage(Controller controller)
        {
            return new CustomMessage(controller);
        }
        #endregion

        #region Member
        /// <summary>
        /// Constante die für den Tempdata[TempMessageString] benutzt wird.
        /// </summary>
        public const string TempMessageString = "CMTempMessageString";

        /// <summary>
        /// Der aktuelle CurrentController um auf 
        /// </summary>
        public Controller CurrentController { get; set; }
        #endregion

        #region Konstruktor
        /// <summary>
        /// Initialisieren der Methode, der CurrentController wird benötigt damit man auf das TempData zurückgreifen kann
        /// </summary>
        /// <param name="controller">Der aktuelle CurrentController damit TempData verwendet werden kann</param>
        private CustomMessage(Controller controller)
        {
            CurrentController = controller;
        }
        #endregion

        #region Public Functions
        /// <summary>
        /// Hinzufügen der Custommessage zu den TempData, damit dieser Mittels des passendne HTMLHelpers 
        /// auf der passenden Seite angezeigt werden kann.
        /// </summary>
        /// <param name="message">Die Message die angezeigt werden soll</param>
        /// <param name="messageType">Der Messagetyp der angezeigt werden soll</param>
        public void AddMessage(string message, MessageTypes messageType)
        {
            if (message != null)
            {
                //Eine Liste erstellen, damit wird jetzt jede Meldung hinzugefügt und alle können angezeigt werden.
                List<Message> messages = (List<Message>)CurrentController.TempData[TempMessageString];
                //Wenn noch keine Nachrichten hinterlegt wurden, muss die Liste initialisiert werden
                if (messages == null)
                {
                    messages = new List<Message>();
                }

                messages.Add(new Message(message, messageType));

                //Die Message im TempData hinterlegen, damit diese dann von der Passenden Helper Methode dargestellt werden kann.
                CurrentController.TempData[TempMessageString] = messages;
            }
        }
        #endregion
    }
}